// 角色管理
var Role = Ext.data.Record.create([{
			name : 'id',
			mapping : 'id',
			type : 'int'
		}, {
			name : 'name',
			mapping : 'name',
			type : 'string'
		}, {
			name : 'memo',
			mapping : 'memo',
			type : 'string'
		}]);

var cm_role = new Ext.grid.ColumnModel([
	new Ext.grid.CheckboxSelectionModel(),
	new Ext.grid.RowNumberer({header : '序号', width : 40}),
	{id:'id',header: "id", dataIndex: 'id', hidden : true},
    {id:'name',header: "角色名称", width: 200, sortable: true, dataIndex: 'name'},
    {id:'memo',header: "备注", width: 360, sortable: true, dataIndex: 'memo'}
]);


var window_add_role = new Ext.Window({
			title : '添加角色',
			width : 480,
			height : 640,
			resizable : false,
			autoHeight : true,
			modal : true,
			closeAction : 'hide',
			listeners : {
				'hide' : function() {
					this.setTitle('添加角色');
					Ext.getCmp("form_add_role").getForm().reset();
				}
			},
			items : [new Ext.FormPanel({
						id : 'form_add_role',
						labelWidth : 70,
						labelAlign : 'right',
						url : '/supervise/sys/role/saveRole.action',
						method : 'post',
						border : false,
						baseCls : 'x-plain',
						bodyStyle : 'padding:5px 5px 0',
						anchor : '100%',
						defaults : {
							width : 360,
							msgTarget : 'side' // 验证信息显示右边
						},
						defaultType : 'textfield',
						items : [{
									fieldLabel : '<span style="color: red">*&nbsp;</span>角色名称',
									// id : 'role.name',
									name : 'role.name',
									allowBlank : false,
									maxLength : 20
								}, {
									fieldLabel : '备注',
									name : 'role.memo',
									xtype : 'textarea',
									maxLength : 100
								}],
						buttonAlign : 'center',
						minButtonWidth : 60,
						buttons : [{
									text : '添加',
									handler : function(btn) {
										var frm = Ext.getCmp("form_add_role").getForm();
										if (frm.isValid()) {
											btn.disable();
											var cnfield = frm.findField('role.name');
											frm.submit({
														waitTitle : '请稍候',
														waitMsg : '正在提交表单数据,请稍候...',
														success : function(form, action) {
															var store = grid_role.getStore();
															var role = new Role({
																		id : action.result.id,
																		name : cnfield.getValue(),
																		memo : form.findField('role.memo').getValue()
																	});
															store.insert(0, [role]);
															grid_role.getView().refresh();
															cnfield.reset();
															btn.enable();
															window_add_role.hide();
															ds_role_select.reload();
														},
														failure : function() {
															Ext.Msg.show({
																		title : '错误提示',
																		msg : '"' + cnfield.getValue() + '" ' + '名称可能已经存在!',
																		buttons : Ext.Msg.OK,
																		fn : function() {
																			cnfield.focus(true);
																			btn.enable();
																		},
																		icon : Ext.Msg.ERROR
																	});
														}
													});
										}
									}
								}, {
									text : '重置',
									handler : function() {
										Ext.getCmp("form_add_role").getForm().reset();
									}
								}, {
									text : '取消',
									handler : function() {
										window_add_role.hide();
									}
								}]
					})]
		});
		
var window_edit_role = new Ext.Window({
			title : '修改角色',
			width : 480,
			height : 640,
			resizable : false,
			autoHeight : true,
			modal : true,
			closeAction : 'hide',
			listeners : {
				'hide' : function() {
					this.setTitle('修改角色');
					Ext.getCmp("form_edit_role").getForm().reset();
				}
			},
			items : [new Ext.FormPanel({
						id : 'form_edit_role',
						labelWidth : 70,
						labelAlign : 'right',
						url : '/supervise/sys/role/saveRole.action',
						method : 'post',
						border : false,
						baseCls : 'x-plain',
						bodyStyle : 'padding:5px 5px 0',
						anchor : '100%',
						defaults : {
							width : 360,
							msgTarget : 'side' // 验证信息显示右边
						},
						defaultType : 'textfield',
						items : [{
									xtype : 'hidden',
									name : 'role.id'
								}, {
									fieldLabel : '<span style="color: red">*&nbsp;</span>角色名称',
									// id : 'role.name',
									name : 'role.name',
									allowBlank : false,
									maxLength : 20
								}, {
									fieldLabel : '备注',
									name : 'role.memo',
									xtype : 'textarea',
									maxLength : 100
								}],
						buttonAlign : 'center',
						minButtonWidth : 60,
						buttons : [{
									text : '修改',
									handler : function(btn) {
										var frm = Ext.getCmp("form_edit_role").getForm();
										if (frm.isValid()) {
											btn.disable();
											var cnfield = frm.findField('role.name');
											frm.submit({
														waitTitle : '请稍候',
														waitMsg : '正在提交表单数据,请稍候...',
														success : function(form, action) {
															var record = grid_role.getSelectionModel().getSelected();
															// set value
															record.set("name", frm.findField('role.name').getValue());
															record.set("memo", frm.findField('role.memo').getValue());
															record.commit();
															frm.reset();
															btn.enable();
															window_edit_role.hide();
															ds_role_select.reload();
														},
														failure : function() {
															Ext.Msg.show({
																		title : '错误提示',
																		msg : '"' + cnfield.getValue() + '" ' + '名称可能已经存在!',
																		buttons : Ext.Msg.OK,
																		fn : function() {
																			cnfield.focus(true);
																			btn.enable();
																		},
																		icon : Ext.Msg.ERROR
																	});
														}
													});
										}
									}
								}, {
									text : '取消',
									handler : function() {
										window_edit_role.hide();
									}
								}]
					})]
		});
var btn_add_role = new Ext.Button({
			text : '添加',
			iconCls : 'icon-add',
			handler : function() {
				window_add_role.show(this);
				window_add_role.center();
			}
		});
var btn_edit_role = new Ext.Button({
			text : '修改',
			iconCls : 'icon-edit',
			handler : function() {
				if (!grid_role.checkOne()) {
					return;
				}
				window_edit_role.show(this);
				window_edit_role.center();
				var record = grid_role.getSelectionModel().getSelected();
				// Ext.getCmp("form_edit_org").getForm().loadRecord(record);
				var frm = Ext.getCmp("form_edit_role").getForm();
				// set value
				frm.findField('role.id').setValue(record.get("id"));
				frm.findField('role.name').setValue(record.get("name"));
				frm.findField('role.memo').setValue(record.get("memo"));
			}
		});
var btn_del_role = new Ext.Button({
			text : '删除',
			iconCls : 'icon-del',
			handler : function() {
				var record = grid_role.getSelectionModel().getSelected();
				if (record) {
					Ext.Msg.confirm('确认删除', '你确定删除该条记录?', function(btn) {
								if (btn == 'yes') {
									Ext.Ajax.request({
												url : '/supervise/sys/role/deleteRole.action',
												params : {
													id : record.data.id
												},
												success : function() {
													grid_role.getStore().remove(record);
													ds_role_select.reload();
												},
												failure : function() {
													Ext.Msg.show({
																title : '错误提示',
																msg : '删除时发生错误!',
																buttons : Ext.Msg.OK,
																icon : Ext.Msg.ERROR
															});
												}
											});
								}
							});
				}
			}
		});

var btn_search_role = new Ext.Button({
			text : '查询',
			iconCls : 'icon-search',
			handler : function() {
				grid_role.render();
				ds_role.load();
			}
		});

var ds_role = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						url : '/supervise/sys/role/findAllRole.action'
					}),
			reader : new Ext.data.JsonReader({
						root : 'root',
						successProperty : 'success'
					}, [{
								name : 'id',
								type : 'int'
							}, {
								name : 'name',
								type : 'string'
							}, {
								name : 'memo',
								type : 'string'
							}])
		});

var grid_role = new Ext.grid.GridPanel({
	title : '角色管理',
	iconCls : 'icon-grid',
	loadMask : {
		msg : '数据加载中...'
	},
	region : 'center',
	cm : cm_role,
	ds : ds_role,
	sm : new Ext.grid.CheckboxSelectionModel({
				singleSelect : false
			}),
	enableColumnMove : false,
	trackMouseOver : false,
	frame : true,
	autoExpandColumn : 'memo',
	tbar : [btn_add_role, '-', btn_edit_role, '-', btn_del_role, '-', btn_search_role],
	// 检测至少选择一个
	checkOne : function() {
		var selections = this.getSelectionModel().getSelections();
		if (selections.length == 0) {
			Ext.MessageBox.alert("提示", "请选择一条的记录！");
			return false;
		} else if (selections.length != 1) {
			Ext.MessageBox.alert("提示", "不能选择多行！");
			return false;
		}
		return true;
	},

	// 检测必须选择一个
	checkMany : function() {
		var selections = this.getSelectionModel().getSelections();
		if (selections.length == 0) {
			Ext.MessageBox.alert("提示", "请至少选择一条的记录！");
			return false;
		}
		return true;
	},
	listeners : {
		'render' : function(e) {
			ds_role.load();
		}
	}
});

var p_role = {
	id : 'role-panel',
	border : false,
	layout : 'border',
	items : [grid_role]
};
